package com.yami.shop.mystery.common.dao;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.yami.shop.bean.bo.ProductBO;
import com.yami.shop.common.util.PageParam;
import com.yami.shop.mystery.common.model.MysteryBox;
import com.yami.shop.mystery.common.model.MysteryBoxOpenRecord;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 盲盒盒子数据接口
 *
 * @author wxf
 * @date 2023/4/6 10:48
 */
public interface MysteryBoxMapper extends BaseMapper<MysteryBox> {

    /**
     * 平台分页获取秒杀活动
     * @param page
     * @param mysteryBox
     * @return
     */
    IPage<MysteryBox> getPage(@Param("page") PageParam<MysteryBox> page, @Param("mysteryBox") MysteryBox mysteryBox);

    /**
     * 平台分页获取秒杀活动
     * @param page
     * @param mysteryBox
     * @return
     */
    IPage<MysteryBox> getPlatformMysteryBoxPage(@Param("page") PageParam<MysteryBox> page, @Param("mysteryBox") MysteryBox mysteryBox);

    /**
     *  用户-查询盲盒列表
     *  根据 剩余数量倒序
     * @param page
     * @param userId
     * @return
     */
    IPage<MysteryBox> getMyBoxPage(@Param("page") PageParam<MysteryBox> page, @Param("userId") String userId, @Param("param") MysteryBox param);

    /**
     *  用户-查询盲盒个数
     *
     * @param userId
     * @param channelCode
     * @return
     */
    Long getMyBoxNum(@Param("userId") String userId, @Param("channelCode") String channelCode);


    List<MysteryBox> getHasStockBoxList(@Param("shopId") Long shopId, @Param("status") Integer status);

    /**
     * 获取盲盒商品信息
     *
     * @param mysteryBoxIds
     * @return
     */
    List<ProductBO> getProductBO(@Param("mysteryBoxIds") List<Long> mysteryBoxIds);

    /**
     * 获取es盲盒商品销量和库存数据
     *
     * @param mysteryBoxIds
     * @return
     */
    List<ProductBO> listEsProdSoldAndStock(@Param("mysteryBoxIds") List<Long> mysteryBoxIds);

    /**
     * 查询所有删除的，商品库存未消耗完的盲盒信息
     *
     * @return
     */
    List<MysteryBox> selectDelist();

    /**
     *  用户-查询盲盒明细
     *
     * @param userId
     * @param boxId
     * @return
     */
    MysteryBox myBoxDetail(@Param("userId") String userId, @Param("boxId") Long boxId);

}
